home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / picture / cube.c < prev    next >
Text File  |  1993-09-23  |  4KB  |  148 lines

  1. //    Copyright 1993 Ralph Gonzalez
  2.  
  3. /*
  4. *    FILE:        cube.c
  5. *    AUTHOR:        R. Gonzalez
  6. *    CREATED:    October 6, 1990
  7. *
  8. *    defines methods of Cube nested segment and Fast_Cube segment
  9. */
  10.  
  11. # include    "cube.h"
  12. # include    "line.h"
  13. # include    "trans.h"
  14.  
  15. /******************************************************************
  16. *    initialize cube
  17. ******************************************************************/
  18. Cube::Cube(void)
  19. {
  20.     int        i;
  21.     
  22.     num_segments = 12;
  23.     
  24.     for (i=0 ; i<12 ; i++)
  25.     {
  26.         segment[i] = new Lline;
  27.         segment[i]->set_color(WHITE);
  28.     }
  29.     
  30.     ((Lline*) segment[0])->set_coord(0.,0.,0.,0.,0.,1.);
  31.     ((Lline*) segment[1])->set_coord(0.,0.,1.,0.,1.,1.);
  32.     ((Lline*) segment[2])->set_coord(0.,1.,1.,0.,1.,0.);
  33.     ((Lline*) segment[3])->set_coord(0.,1.,0.,0.,0.,0.);
  34.     ((Lline*) segment[4])->set_coord(1.,0.,0.,1.,0.,1.);
  35.     ((Lline*) segment[5])->set_coord(1.,0.,1.,1.,1.,1.);
  36.     ((Lline*) segment[6])->set_coord(1.,1.,1.,1.,1.,0.);
  37.     ((Lline*) segment[7])->set_coord(1.,1.,0.,1.,0.,0.);
  38.     ((Lline*) segment[8])->set_coord(0.,0.,0.,1.,0.,0.);
  39.     ((Lline*) segment[9])->set_coord(0.,0.,1.,1.,0.,1.);
  40.     ((Lline*) segment[10])->set_coord(0.,1.,1.,1.,1.,1.);
  41.     ((Lline*) segment[11])->set_coord(0.,1.,0.,1.,1.,0.);
  42. }
  43.  
  44. /******************************************************************
  45. *    initialize fast cube
  46. ******************************************************************/
  47. Fast_Cube::Fast_Cube(void)
  48. {
  49.     int        i;
  50.     
  51.     for (i=0 ; i<8 ; i++)
  52.         c[i] = new Coord3;
  53.     
  54.     c[0]->set(0.,0.,0.);
  55.     c[1]->set(0.,0.,1.);
  56.     c[2]->set(0.,1.,1.);
  57.     c[3]->set(0.,1.,0.);
  58.     c[4]->set(1.,0.,0.);
  59.     c[5]->set(1.,0.,1.);
  60.     c[6]->set(1.,1.,1.);
  61.     c[7]->set(1.,1.,0.);
  62.     
  63.     set_color(CYAN);
  64. }
  65.  
  66. /******************************************************************
  67. *    color fast cube
  68. ******************************************************************/
  69. void    Fast_Cube::set_color(color cube_color_val)
  70. {
  71.     cube_color = cube_color_val;
  72. }
  73.  
  74. /******************************************************************
  75. *    draw fast cube
  76. ******************************************************************/
  77. void    Fast_Cube::draw(Camera* camera,Projector* projector,
  78.                     Transformation* trans)
  79. {
  80.     int            i;
  81.     boolean        success = TRUE;
  82.     Coord2        *image[8];
  83.     Coord3        *new_coord;
  84.         
  85.     new_coord = new Coord3;
  86.  
  87.     for (i=0 ; i<8 ; i++)
  88.     {
  89.         image[i] = new Coord2;
  90.         new_coord->apply(c[i],trans);
  91.         if (!camera->take_photo(image[i],new_coord))
  92.             success = FALSE;
  93.     }
  94.     
  95.     if (success)
  96.     {    
  97.         projector->show_line(image[0],image[1],cube_color);
  98.         projector->show_line(image[1],image[2],cube_color);
  99.         projector->show_line(image[2],image[3],cube_color);
  100.         projector->show_line(image[3],image[0],cube_color);
  101.         projector->show_line(image[0],image[4],cube_color);
  102.         projector->show_line(image[4],image[5],cube_color);
  103.         projector->show_line(image[5],image[6],cube_color);
  104.         projector->show_line(image[6],image[7],cube_color);
  105.         projector->show_line(image[7],image[4],cube_color);
  106.         projector->show_line(image[1],image[5],cube_color);
  107.         projector->show_line(image[2],image[6],cube_color);
  108.         projector->show_line(image[3],image[7],cube_color);
  109.     }
  110.     
  111.     for (i=0 ; i<8 ; i++)
  112.         delete image[i];
  113.  
  114.     delete new_coord;
  115. }
  116.  
  117. /******************************************************************
  118. *    move fast cube coordinates
  119. ******************************************************************/
  120. void    Fast_Cube::move(Transformation* trans)
  121. {
  122.     Coord3    *temp;
  123.     int        i;
  124.     
  125.     temp = new Coord3;
  126.     
  127.     for (i=0 ; i<8 ; i++)
  128.     {
  129.         temp->equate(c[i]);
  130.         c[i]->apply(temp,trans);
  131.     }
  132.  
  133.     delete temp;
  134. }
  135.  
  136. /******************************************************************
  137. *    destroy fast cube
  138. ******************************************************************/
  139. Fast_Cube::~Fast_Cube(void)
  140. {
  141.     int        i;
  142.     
  143.     for (i=0 ; i<8 ; i++)
  144.         delete c[i];
  145. }
  146.  
  147.  
  148.